package cn.ware.house.interfaces.controller.productcontroller;

import cn.ware.house.interfaces.entity.goods.ProductCategory;
import cn.ware.house.interfaces.service.productservice.ProductCategoryService;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * 商品分类信息控制层类，负责处理与商品分类相关的HTTP请求，
 * 通过调用商品分类服务层（ProductCategoryService）的方法来完成具体业务逻辑，
 * 并将结果以合适的HTTP响应格式返回给前端。
 */
@RestController
@RequestMapping("/product-category")
public class ProductCategoryController {
    private final ProductCategoryService productCategoryService;

    public ProductCategoryController(ProductCategoryService productCategoryService) {
        this.productCategoryService = productCategoryService;
    }

    // 根据分类编号查询商品分类信息（包含子分类信息，构建树形结构）
    @GetMapping("/{categoryId}/with-children")
    @ResponseStatus(HttpStatus.OK)
    public ProductCategory getProductCategoryByIdWithChildren(@PathVariable Integer categoryId) {
        return productCategoryService.findProductCategoryByIdWithChildren(categoryId);
    }

    // 查询所有顶级（根）商品分类信息（没有父分类的分类）
    @GetMapping("/root")
    @ResponseStatus(HttpStatus.OK)
    public List<ProductCategory> getRootProductCategories() {

        return productCategoryService.findRootProductCategories();
    }
    // 根据父分类编号查询子分类信息列表
    @GetMapping("/")
    @ResponseStatus(HttpStatus.OK)
    public List<ProductCategory> getAllChildrenCategories() {
        return productCategoryService.findRootProductCategories();
    }
    // 根据父分类编号查询子分类信息列表
    @GetMapping("/parent/{parentId}")
    @ResponseStatus(HttpStatus.OK)
    public List<ProductCategory> getChildrenCategoriesByParentId(@PathVariable Integer parentId) {
        return productCategoryService.findChildrenCategoriesByParentId(parentId);
    }

    // 插入商品分类信息（包含设置父分类关联）
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public boolean insertProductCategory(@RequestBody ProductCategory productCategory) {
        return productCategoryService.insertProductCategory(productCategory);
    }

    // 根据分类编号更新商品分类信息
    @PutMapping("/{categoryId}")
    @ResponseStatus(HttpStatus.OK)
    public boolean updateProductCategoryById(@PathVariable Integer categoryId, @RequestBody ProductCategory productCategory) {
        productCategory.setId(categoryId);
        return productCategoryService.updateProductCategoryById(productCategory);
    }

    // 根据分类编号删除商品分类信息（同时处理关联的子分类，例如级联删除等，可根据业务规则定）
    @PostMapping("/delete")
    @ResponseStatus(HttpStatus.OK)
    public boolean deleteProductCategoryById(@RequestBody String ids) {
        ids =ids.substring(8,ids.indexOf("]"));
        String[] idsStr=ids.split(",");
        ArrayList<Integer> list = new ArrayList<>();
        for (String s:idsStr
             ) {
            list.add(Integer.parseInt(s));
        }
        System.out.println(list);
        return productCategoryService.deleteProductCategoriesByIds(list);
    }


}